您可以设置应用程序中的哪些元素与用户输入交互以及如何交互。在 Kanzi 中,要处理用户输入,您可以:
对于不必手动创建操纵器的 Kanzi 节点,因为它们默认会处理输入:
触发器和动作可用于创建基于用户输入的交互。请参阅 使用触发器。
Kanzi提供低级别和高级别的输入访问:
Kanzi 提供输入操纵器,为 Kanzi 工程中的节点启用手势识别。您可以通过 API 分配操纵器。
Kanzi 提供这些输入操纵器:
InputManipulator
是操纵器基本类,诸如 ClickManipulator::create
和 PanManipulator::create
等函数创建负责相应手势识别的输入操纵器。
当您创建输入操纵器时,要组织手势,通过 Node::addInputManipulator
将其连接到节点。这也会连接节点的所有子节点。
连接的操纵器可产生消息,以响应用户动作。各操纵器通过消息报告手势识别期间的不同事件,例如平移操纵器的 PanManipulator::StartedMessage
、PanManipulator::MovedMessage
、PanManipulator::FinishedMessage
等等。
创建用户界面时,特别注意您的应用程序如何处理用户输入,因为一次仅一个节点可以接收用户输入。例如,定义点击是由前面的节点还是后面的节点处理。
Kanzi 采用命中测试来确定接收输入的节点。实际上,命中测试基于输入事件的屏幕坐标从摄像机向 3D 场景投射射线。
默认情况下,按钮 (Button)、列表框项容器 (List Box Item Container)、滚动视图 (Scroll View) 和 滑块 (Slider) 节点启用命中测试。要为任何类型的节点启用命中测试,向该节点添加可测试命中 (Hit Testable) 属性并启用。
边框相交并且已启用 可测试命中 (Hit Testable) 属性的 摄像机 (Camera) 节点的第一个节点接收输入,执行事件并生成设置动作,如发送点击消息。
例如,如果您放置两个方框 (Box) 节点,使BoxFront 节点位于BoxRear 节点之前并完全挡住它:
当您要更改节点接收输入的输入区,使用可测试命中容器 (Hit Testable Container) 属性。在 Kanzi 中,所有节点的命中测试默认基于各节点的布局尺寸。使用可测试命中容器 (Hit Testable Container) 属性在输入区中包括具有该属性的节点布局尺寸、以及该节点任何子节点的布局尺寸,而非该节点的包围盒。
默认情况下,按钮 (Button)、列表框项容器 (List Box Item Container)、滚动视图 (Scroll View) 和 3D 滑块 (Slider 3D) 节点启用可测试命中容器 (Hit Testable Container) 属性。要设置任何其他类型的节点输入区的大小,添加并启用可测试命中容器 (Hit Testable Container) 和可测试命中 (Hit Testable) 属性。
例如,包含方框 (Box) 节点的 3D 堆栈布局 (Stack Layout 3D) 节点接收点击输入: